iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
Kubernetes

異世界生存戰記:30天煉成GKE大師系列 第 2

Day2 告別網路孤島 Shared VPC 打造安全連接

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240916/20169017U3WUubwxWd.png

前言

GCP 相比於其他雲,多了 Project(專案) 層級,在規劃 GCP 架構時往往以環境來區分專案,在每個專案下都有各自獨立的 VPC,當規模越來越大時會造成 VPC 太多,IP 容易造成衝突難以維護,且由於 GKE 控制節點的特殊架構(下篇文章會提到),無法像 AWS 一樣,較難使用 VPC Peering 的方式來連接不同專案下的 GKE,為了解決以上的痛點,GCP 的 Shared VPC 就派上用場了。

Shared VPC 簡介

Shared VPC 可以讓數個 Projects(專案) 連結相同的 VPC Network,讓這些 Projects 能夠安全、有效率地使用內網傳輸。

如下圖,Shared VPC 的架構為一個 Host Project 連接多個 Service Project。Host project 的 VPC Networks 就稱為 Shared VPC Networks。而位於 Service project 的相關資源可以使用 Shared VPC Networks 的 Subnets。如下圖

https://ithelp.ithome.com.tw/upload/images/20240916/20169017zJBHgHawiT.png

具有共享 VPC 網絡的宿主項目會為兩個服務項目提供內部連接,而獨立項目不使用共享 VPC。

架構介紹

在 GCP 創建兩個專案,分別是 ithome-202409-demo 及 ithome-202409-demo-2,本章節要介紹將兩個專案設定成 Shared VPC 的模式讓多個不同專案但是使用同一個 VPC,其中以 ithome-202409-demo 作為 Shared VPC Host project,ithome-202409-demo-2 作為 Shared VPC Service project。

如下表,本章節只示範建立 Shared VPC,表中的 Proxy VPC 可以請讀者當做練習,之後的文章會使用到。

https://ithelp.ithome.com.tw/upload/images/20240916/20169017LDkCBxBX9e.png

以 Terraform 在 ithome-202409-demo 專案創建 VPC 以及 Subnet,同時記得建立次要 IPv4 範圍給 GKE 中的 Pod 和 Service 使用。
因為篇幅有限,已經將 main.tf, variable.tf, provider.tf 合併在同一份 yaml 內,在正式環境中,為了方便維護一般都會拆分開來。

# provider.tf
terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "5.4.0"
    }
  }
  backend "gcs" {
  #將tfstat狀態文件保存到GCS
    bucket  = "tfstat保存的GCS bucket"
    prefix  = "network/demo-project-tfstate"
  }
  required_version = ">= 0.14"
}
provider "google" {
  project     = "${var.project_id}"

}

# variable.tf
variable "project_id" {
  description = "The project ID to host the network in"
  default     = "ithome-202409-demo"
}
variable "vpc" {
  description = "VPC Name"
  default = "ithome-202409-demo-vpc"
}
variable "subnet-01" {
  description = "subnet Name"
  default = "ithome-202409-demo-us-central1-subnet"
}
variable "subnet-02" {
  description = "subnet Name"
  default = "ithome-202409-demo-2-us-central1-subnet"
}

# main.tf
module "vpc" {
    source  = "terraform-google-modules/network/google"
    version = "~> 7.5"

    project_id              = "${var.project_id}"
    network_name            = "${var.vpc}"
    routing_mode            = "REGIONAL"
    auto_create_subnetworks = "false"
    description             = "This Shared VPC use for demo GKE Cluster and created by Terraform"
    subnets = [
        {
            subnet_name           = "${var.subnet-01}"
            description           = "ithome-202409-demo-subnet node ip range"
            subnet_ip             = "10.120.0.0/20" #10.120.0.1-10.120.15.254
            subnet_region         = "us-central1"
            subnet_private_access = "true"
        },
        {
            subnet_name           = "${var.subnet-02}"
            description           = "ithome-202409-demo-2-subnet node ip range"
            subnet_ip             = "10.120.64.0/20" #10.120.64.1-10.120.79.254
            subnet_region         = "us-central1"
            subnet_private_access = "true"
        },
    ]
    secondary_ranges = {
        "${var.subnet-01}" = [
		        #ithome-202409-demo-us-central1-subnet pod ip range
            { 
                range_name    = "ithome-202409-demo-pod-subnet"
                ip_cidr_range = "10.120.16.0/20" #10.120.16.1-10.120.31.254
            },
            #ithome-202409-demo-us-central1-subnet service ip range
            {
                range_name    = "ithome-202409-demo-service-subnet"
                ip_cidr_range = "10.120.32.0/20" #10.120.32.1-10.120.47.254
            },
        ]

        "${var.subnet-02}" = [
		        #ithome-202409-demo-2-us-central1-subnet pod ip range
            {
                range_name    = "ithome-202409-demo-2-pod-subnet"
                ip_cidr_range = "10.120.80.0/20" #10.120.80.1-10.120.95.254
            },
            #ithome-202409-demo-2-us-central1-subnet service ip range
            {
                range_name    = "ithome-202409-demo-2-service-subnet"
                ip_cidr_range = "10.120.96.0/20" #10.120.96.1-10.120.111.254	
            },
        ]
    }
    ]
}

https://ithelp.ithome.com.tw/upload/images/20240916/20169017EgZ1onJlVX.png

在主要專案中設定Shared VPC
https://ithelp.ithome.com.tw/upload/images/20240916/20169017rmIYhGWSsz.pnghttps://ithelp.ithome.com.tw/upload/images/20240916/20169017KYxSyZaSST.pnghttps://ithelp.ithome.com.tw/upload/images/20240916/20169017XyTQQEPvAR.png

授予 ithome-202409-demo-2 專案使用子網路 Subnet 創建 GKE 的權限,我以 ithome-202409-demo-2 的專案編號(407205409614)為範例。

'專案編號'-compute@developer.gserviceaccount.com
'專案編號'@cloudservices.gserviceaccount.com
service-'專案編號'@container-engine-robot.iam.gserviceaccount.com

407205409614@cloudservices.gserviceaccount.com
407205409614-compute@developer.gserviceaccount.com
service-407205409614@container-engine-robot.iam.gserviceaccount.com

https://ithelp.ithome.com.tw/upload/images/20240916/20169017C2791n0ETn.png

設定完成後的頁面

https://ithelp.ithome.com.tw/upload/images/20240916/20169017BWq5sbOQjV.pnghttps://ithelp.ithome.com.tw/upload/images/20240916/20169017bnGter1Za4.png

總結

在這篇文章中,我們深入探討了 GCP Shared VPC 的概念及其優勢,特別是在簡化 GKE 網路管理方面的應用。我們還演示了如何利用 Terraform 這一強大的基礎設施即代碼工具,以可重複且高效的方式設置 Shared VPC。
通過遵循這些步驟,可以為接下來文章所要介紹的 Google Kubernetes Engine (GKE)叢集建立一個集中化且安全管理的網絡基礎設施,為容器化應用程序提供堅實的基礎。

參考文件


上一篇
Day1 鐵人賽開始,讓我們穿越到 Google Kubernetes Engine (GKE) 的世界吧!
下一篇
Day3 Terraform 馭雲術:打造我的 GKE 容器帝國
系列文
異世界生存戰記:30天煉成GKE大師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言